// /////////////////////////////////////////////////////////////////////////////
//
// Name:            IAWTEventsContainer.java
// Author:          Michael Bartsch
//
// Desc :           Defines the IAWTEventsContainer interface.
//
// License:         Copyright (C) 2009 Michael Bartsch
//
//                  This software is provided 'as-is', without any express or
//                  implied warranty. In no event will the authors be held
//                  liable for any damages arising from the use of this
//                  software.
//
//                  Permission is granted to anyone to use this software for
//                  any purpose, including commercial applications, and to
//                  alter it and redistribute it freely, subject to the
//                  following restrictions:
//
//                  1. The origin of this software must not be misrepresented;
//                  you must not claim that you wrote the original software. If
//                  you use this software in a product, an acknowledgment in the
//                  product documentation would be appreciated but is not
//                  required.
//
//                  2. Altered source versions must be plainly marked as such,
//                  and must not be misrepresented as being the original
//                  software.
//
//                  3. This notice may not be removed or altered from any source
//                  distribution.
//
// /////////////////////////////////////////////////////////////////////////////

// Package
package net.dotsimplicity.events.awt;

// Import classes
import java.awt.event.*;
import net.dotsimplicity.events.*;


//IEventsContainer interface
/**
 * Defines the methods an AWTEventContainer should implement.
 * <p>
 * You can use this interface when you want to create your own AWTEventContainer that ALSO requires
 * multiple inheritance. In all other cases you can simply extend {@link AWTEventsContainer}.
 */
public interface IAWTEventsContainer extends IEventsContainer
{	
	/**
	 * Adds this container as an {@link ActionListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>actionPerformed;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts ActionListeners, otherwise 
	 * nothing will happen.
	 */
	void addActionListener();
	/**
	 * Adds this container as an {@link AdjustmentListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>adjustmentValueChanged;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts AdjustmentListeners, 
	 * otherwise nothing will happen.
	 */
	void addAdjustmentListener();
	/**
	 * Adds this container as an {@link ComponentListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>componentHidden;
	 *    <li>componentMoved;
	 *    <li>componentResized;
	 *    <li>componentShown;
	 * </ul>
	 */
	void addComponentListener();
	/**
	 * Adds this container as an {@link ContainerListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>componentAdded;
	 *    <li>componentRemoved;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts ContainerListeners, 
	 * otherwise nothing will happen.
	 */
	void addContainerListener();
	/**
	 * Adds this container as an {@link FocusListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>focusGained;
	 *    <li>focusLost;
	 * </ul>
	 */
	void addFocusListener();
	/**
	 * Adds this container as an {@link HierarchyBoundsListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>ancestorMoved;
	 *    <li>ancestorResized;
	 * </ul>
	 */
	void addHierarchyBoundsListener();
	/**
	 * Adds this container as an {@link HierarchyListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>hierarchyChanged;
	 * </ul>
	 */
	void addHierarchyListener();
	/**
	 * Adds this container as an {@link ItemListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>itemStateChanged
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts ItemListeners, otherwise
	 * nothing will happen.
	 */
	void addItemListener();
	/**
	 * Adds this container as an {@link KeyListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>keyPressed;
	 *    <li>keyReleased;
	 *    <li>keyTyped;
	 * </ul>
	 */
	void addKeyListener();
	/**
	 * Adds this container as an {@link MouseListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>mouseClicked;
	 *    <li>mouseEntered;
	 *    <li>mouseExited;
	 *    <li>mousePressed;
	 *    <li>mouseReleased;
	 * </ul>
	 */
	void addMouseListener();
	/**
	 * Adds this container as an {@link MouseMotionListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>mouseDragged;
	 *    <li>mouseMoved;
	 * </ul>
	 */
	void addMouseMotionListener();
	/**
	 * Adds this container as an {@link MouseWheelListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>mouseWheelMoved;
	 * </ul>
	 */
	void addMouseWheelListener();
	/**
	 * Adds this container as an {@link TextListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>textValueChanged;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts TextListeners, otherwise
	 * nothing will happen.
	 */
	void addTextListener();
	/**
	 * Adds this container as an {@link WindowFocusListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>windowGainedFocus;
	 *    <li>windowLostFocus;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts WindowFocusListeners, 
	 * otherwise nothing will happen.
	 */
	void addWindowFocusListener();
	/**
	 * Adds this container as an {@link WindowListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>windowActivated;
	 *    <li>windowClosed;
	 *    <li>windowClosing;
	 *    <li>windowDeactived;
	 *    <li>windowDeiconified;
	 *    <li>windowIconifie;
	 *    <li>windowOpened;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts WindowListeners, otherwise
	 * nothing will happen.
	 */
	void addWindowListener();
	/**
	 * Adds this container as an {@link WindowStateListener} to the base component.
	 * <p>
	 * Adds the following {@link Event Events}:
	 * <ul>
	 *    <li>windowStateChanged;
	 * </ul>
	 * <p>
	 * Calling this method will only work if the base component accepts WindowStateListeners, 
	 * otherwise nothing will happen.
	 */
	void addWindowStateListener();
	
	/**
	 * Removes this container as an {@link ActionListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeActionListener();
	/**
	 * Removes this container as an {@link AdjustmentListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeAdjustmentListener();
	/**
	 * Removes this container as an {@link ComponentListener} from the base component.
	 */
	void removeComponentListener();
	/**
	 * Removes this container as an {@link ContainerListener} from the base component.
	 */
	void removeContainerListener();
	/**
	 * Removes this container as an {@link FocusListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeFocusListener();
	/**
	 * Removes this container as an {@link HierarchyBoundsListener} from the base component.
	 */
	void removeHierarchyBoundsListener();
	/**
	 * Removes this container as an {@link HierarchyListener} from the base component.
	 */
	void removeHierarchyListener();
	/**
	 * Removes this container as an {@link ItemListener} from the base component.
	 */
	void removeItemListener();
	/**
	 * Removes this container as an {@link MouseListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeMouseListener();
	/**
	 * Removes this container as an {@link MouseMotionListener} from the base component.
	 */
	void removeMouseMotionListener();
	/**
	 * Removes this container as an {@link MouseWheelListener} from the base component.
	 */
	void removeMouseWheelListener();
	/**
	 * Removes this container as an {@link KeyListener} from the base component.
	 */
	void removeKeyListener();
	/**
	 * Removes this container as an {@link TextListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeTextListener();
	/**
	 * Removes this container as an {@link WindowFocusListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeWindowFocusListener();
	/**
	 * Removes this container as an {@link WindowListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeWindowListener();
	/**
	 * Removes this container as an {@link WindowStateListener} from the base component.
	 * <p>
	 * The same rules apply as for the <i>add</i> equivalent.
	 */
	void removeWindowStateListener();
}

// End of File
